package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.PropertyRolePO;
import com.itlong.cloud.POJO.VO.property.PropertyButtonFunctionVO;
import com.itlong.cloud.POJO.VO.property.PropertyRoleVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营系统角色信息数据访问接口
 * </desc>
 *
 * @createDate 2017/9/13
 */
@Mapper
@Repository
public interface IPropertyRoleDao extends IAbstractBaseDao<PropertyRolePO>{

    /**
     * <desc>
     *      获取物业管理员角色 ：集团物业管理员，物业管理员，独立开发者
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/10
     */
    List<PropertyRolePO> getRootRoles();

    /**
     * <desc>
     *      保存角色的菜单资源
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/26
     */
    Integer saveRoleFunction(Map<String, Object> params);


    /**
     * <desc>
     *      保存角色
     * </desc>
     *
     * @param params 数据参数
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Integer save(Map<String,Object> params);
    /**
     * <desc>
     *      修改角色
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Integer update(Map<String,Object> params);
    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Biao.R
     * @createDate 2017/10/17
     */
    List<PropertyRoleVO> getPageList(Map<String,Object> params);
    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return 总数量
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Integer getPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      删除
     * </desc>
     *
     * @param roleIds 角色id数组
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Integer delete(@Param("roleIds")String[] roleIds, @Param("updateTime") Date updateTime);

    /**
     * <desc>
     *      获取最大编号
     * </desc>
     * @param  projectId    所属项目编号
     * @return 最大编号
     * @author Biao.R
     * @createDate 2017/10/17
     */
    String getMaxNum(@Param("projectId") String projectId);


    /**
     * <desc>
     *      删除用户的角色
     * </desc>
     *
     * @param userIds   用户id数组
     * @param roleId    角色id
     * @return
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Integer deleteRoleUsers(@Param("userIds")String[] userIds,@Param("roleId")String roleId);

    /**
     * <desc>
     *      保存用户的角色
     * </desc>
     *
     * @param params
     * @return
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Integer saveRoleUsers(Map<String,Object> params);

    /**
     * <desc>
     *      获取用户的角色名
     * </desc>
     *
     * @param userId
     * @return
     * @author Biao.R
     * @createDate 2017/10/17
     */
    Map<String,Object> getUserRoleName(@Param("userId")String userId);

    /**
     * <desc>
     *      根据条件查询角色
     * <desc/>
     * @param  params   查询参数
     * @return  List<PropertyRolePO>    返回的数据集
     * @author Biao.R
     * @createDate 2017/10/18
     */
    List<PropertyRolePO> getByParams(Map<String, Object> params);

    /**
     * <desc>
     *      根据条件获取角色拥有的按钮权限
     * <desc/>
     * @param   params  查询参数
     * @return  List<PropertyFunctionPO>    查询到的按钮数据集
     * @author Biao.R
     * @createDate 2017/11/24
     */
    List<PropertyButtonFunctionVO> getRoleBtnsByParams(Map<String, Object> params);


    /**
     * <desc>
     *      根据条件查询property_role_function
     * <desc/>
     * @param  params   查询条件
     * @return 查询到的ID集合
     * @author Biao.R
     * @createDate 2018/1/19
     */
    List<String> getRoleFunctionIdsByParams(Map<String, Object> params);

    /**
     * <desc>
     *      根据ID批量删除property_role_function
     * <desc/>
     * @param  idList id集合
     * @author Biao.R
     * @createDate 2018/1/19
     */
    void deleteRoleFunctionById(@Param("idList") List<String> idList);

    /**
     * <desc>
     *      查询角色物业app字段
     * </desc>
     *
     * @author wangzhi
     * @createDate 2019/12/24
     */
    String getRolePropertyApp(Map<String, Object> params);

}
